package cn.iocoder.yudao.module.handguard.service.user;

import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.handguard.controller.admin.client.vo.UserAddReqVo;
import cn.iocoder.yudao.module.handguard.controller.admin.client.vo.UserAddReqsVo;
import cn.iocoder.yudao.module.handguard.controller.admin.client.vo.UserAllocationReqVo;
import cn.iocoder.yudao.module.handguard.controller.admin.client.vo.UserPageReqVO;
import cn.iocoder.yudao.module.handguard.controller.admin.order.vo.MemberUserBaseVO;
import cn.iocoder.yudao.module.handguard.controller.admin.userdb.vo.UserInfoDbVO;
import cn.iocoder.yudao.module.handguard.controller.app.user.vo.*;
import cn.iocoder.yudao.module.handguard.dal.dataobject.product.ProductDO;
import cn.iocoder.yudao.module.handguard.dal.dataobject.productaccess.ProductAccessDO;
import cn.iocoder.yudao.module.handguard.dal.dataobject.productaccessrecord.ProductAccessRecordDO;
import cn.iocoder.yudao.module.handguard.dal.dataobject.user.UserDO;
import cn.iocoder.yudao.module.handguard.properties.WxLoginVo;

import java.util.List;

/**
 * @author: liuweijun
 * @since: 2023/9/11 17:15
 * @description:
 */
public interface MiniUserService {

    PageResult<UserDO> getUserPage(UserPageReqVO pageReqVO);

    MemberUserBaseVO getUserInfo(Long id);

    void updateUserAllocationAgent(UserAllocationReqVo reqVo);

    void updateUserAllocationWarrant(UserAllocationReqVo reqVo);

    int addSalesman(UserAddReqVo reqVo);

    CommonResult<AuthLoginRespVo> login(WxLoginVo wxLoginVo);

    CommonResult<UserPropertyBaseVO> authGetUserInfo(Long userId);

    int salesmanAddUser(UserAddReqsVo reqVo);

    int updateUserInfo(UserAddReqsVo reqVo);

    AuthLoginRespVo weixinMiniAppLogin(Long userId);

    List<ProductDO> getAgentProductList(Long userId);

    Integer getMyLimit(Long userId);

    MyTestResVo getMyTest(Long userId);

    ApplyForProductResVo applyForProduct(ApplyForProductReqsVo reqsVo);

    int deleteUser(Long id);

    int forbiddenUser(Long id);

    MyTestResVo getMyOptionalTest(Long userId, Long productType);

    CommonResult<String> transferWarrant(TransferWarrantReqVo reqsVo);

    SalesmanInfosResVo getSalesmanInfos(Long userId);

    List<PropertyResVo> getMyProperty(Long userId) throws Exception;

    CommonResult<String> getCheckProductInfo(Long userId,String productTypeId);

    List<ProductAccessDO> getCheckProductAccess(String orderId);

    void dbUpdateUser(UserInfoDbVO vo);

    boolean getCheckFinanceFlag();

    void cancelAllocationWarrant(UserAllocationReqVo reqVo);

    void cancelAllocationAgent(UserAllocationReqVo reqVo);

    String setOperator(Long userId, SetOperatorVo req);

    boolean updateIdCard(Long userId,UpdateIdCardReqVO reqVo);

    void updateIsWork(Long id);
}
